#include "../games/globale.h" // Fonction et Headers globaux
#include "../games/cls_timer.h" // Classe de gestion du timer

/* ----------------------------------------------------
			Constructeur
  ----------------------------------------------------- */
cls_Timer::cls_Timer()
{
    debugTrace("Constructeur cls_Timer");
    //Initialisation des variables
    startTicks = 0;
    pausedTicks = 0;
    paused = false;
    started = false;
}

/* ----------------------------------------------------
			Destructeur
  ----------------------------------------------------- */
cls_Timer::~cls_Timer()
{
    debugTrace("Destructeur cls_Timer");
}

/* ----------------------------------------------------
			Start
  ----------------------------------------------------- */
void cls_Timer::start()
{
    //On demarre le timer
    started = true;

    //On enlève la pause du timer
    paused = false;

    //On récupére le temps courant
    startTicks = SDL_GetTicks();
}

/* ----------------------------------------------------
			Stop
  ----------------------------------------------------- */
void cls_Timer::stop()
{
    //On stoppe le timer
    started = false;

    //On enlève la pause
    paused = false;
}

/* ----------------------------------------------------
			Donne l'intervale entre deux TICKS
  ----------------------------------------------------- */
int cls_Timer::get_ticks()
{
    //Si le timer est en marche
    if( started == true )
    {
        //Si le timer est en pause
        if( paused == true )
        {
            //On retourne le nombre de ticks quand le timer a été mis en pause
            return pausedTicks;
        }
        else
        {
            //On retourne le temps courant moins le temps quand il a démarré
            return SDL_GetTicks() - startTicks;
        }
    }

    //Si le timer n'est pas en marche
    return 0;
}

/* ----------------------------------------------------
			Pause
  ----------------------------------------------------- */
void cls_Timer::pause()
{
    //Si le timer est en marche et pas encore en pause
    if( ( started == true ) && ( paused == false ) )
    {
        //On met en pause le timer
        paused = true;

        //On calcul le pausedTicks
        pausedTicks = SDL_GetTicks() - startTicks;
    }
}

/* ----------------------------------------------------
			Unpause
  ----------------------------------------------------- */
void cls_Timer::unpause()
{
    //Si le timer est en pause
    if( paused == true )
    {
        //on enlève la pause du timer
        paused = false;

        //On remet à zero le startTicks
        startTicks = SDL_GetTicks() - pausedTicks;

        //Remise à zero du pausedTicks
        pausedTicks = 0;
    }
}

/* ----------------------------------------------------
			Is_Started
  ----------------------------------------------------- */
bool cls_Timer::is_started()
{
    return started;
}

/* ----------------------------------------------------
			Is_Paused
  ----------------------------------------------------- */
bool cls_Timer::is_paused()
{
    return paused;
}
